﻿using System;
using System.Collections.Generic;

using System.Text;
using System.Data.OleDb;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.ObjectModel;

namespace Sinacor.Tools.Dado
{
    public class MensagemExcecao : DadoBase<Entidade.MensagemExcecao>
    {
        private string configKey = "ORACLETFWD";//"ORACLETFW";
        public override void incluir(Sinacor.Tools.Entidade.MensagemExcecao entidade)
        {
            string sql = string.Format(" INSERT INTO SINAMAIS.TFWEXCECAO(CODIGOEXCECAO, CODIGOMENSAGEM, MENSAGEMEXCECAO, MODULO, SUBMODULO) VALUES ({0}, {1}, '{2}', '{3}', '{4}')",
                entidade.Id, entidade.Mensagem.Id, entidade.Descricao.Trim(), entidade.Modulo.Trim(), entidade.Submodulo.Trim());
            ResourceAccess<Sinacor.Tools.Entidade.MensagemExcecao> dados = new ResourceAccess<Sinacor.Tools.Entidade.MensagemExcecao>();
            object retorno = null;
            using (IDbCommand cmd = dados.getCommand(sql.ToString(), CommandType.Text, configKey))
            {
                retorno = cmd.ExecuteNonQuery();                
                cmd.Connection.Close();
            }
        }

        public override void alterar(Sinacor.Tools.Entidade.MensagemExcecao entidade)
        {
            string sql = string.Format(" UPDATE SINAMAIS.TFWEXCECAO SET CODIGOMENSAGEM = {0}, MENSAGEMEXCECAO = '{1}', MODULO = '{2}', SUBMODULO = '{3}' WHERE CODIGOEXCECAO = {4}",
                entidade.Mensagem.Id, entidade.Descricao.Trim(), entidade.Modulo.Trim(), entidade.Submodulo.Trim(), entidade.Id);
            ResourceAccess<Sinacor.Tools.Entidade.MensagemExcecao> dados = new ResourceAccess<Sinacor.Tools.Entidade.MensagemExcecao>();
            using (IDbCommand cmd = dados.getCommand(sql.ToString(), CommandType.Text, configKey))
            {
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
            }
        }

        public override void deletar(Sinacor.Tools.Entidade.MensagemExcecao entidade)
        {

            string sql = string.Format(" DELETE FROM SINAMAIS.TFWEXCECAO WHERE CODIGOEXCECAO = {0}", entidade.Id);
            ResourceAccess<Sinacor.Tools.Entidade.MensagemExcecao> dados = new ResourceAccess<Sinacor.Tools.Entidade.MensagemExcecao>();
            using (IDbCommand cmd = dados.getCommand(sql.ToString(), CommandType.Text, configKey))
            {
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
            }
        }

        public override List<Sinacor.Tools.Entidade.MensagemExcecao> consultar(Sinacor.Tools.Entidade.MensagemExcecao entidade)
        {
            ResourceAccess<Sinacor.Tools.Entidade.MensagemExcecao> dados = new ResourceAccess<Sinacor.Tools.Entidade.MensagemExcecao>();
            IDbCommand cmd = dados.getCommand(this.getQuery(entidade), CommandType.Text, configKey);
            return dados.getListResult(cmd);
        }

        //reindentado para entendimento - esertorio - 200809301159
        protected string getQuery(Sinacor.Tools.Entidade.MensagemExcecao entidade)
        {
            StringBuilder sql = new StringBuilder();
            sql.Append(@" SELECT");
            sql.Append(@"  SINAMAIS.TFWEXCECAO.CODIGOEXCECAO As ""Id""");
            sql.Append(@", SINAMAIS.TFWEXCECAO.MENSAGEMEXCECAO As ""Descricao""");
            sql.Append(@", SINAMAIS.TFWEXCECAO.MODULO As ""Modulo""");
            sql.Append(@", SINAMAIS.TFWEXCECAO.SUBMODULO As ""Submodulo""");
            sql.Append(@", TFWMENSAGEM.CODIGOMENSAGEM As ""Mensagem.Id""");
            sql.Append(@", TFWMENSAGEM.RESOURCEKEY As ""Mensagem.ResourceKey""");
            sql.Append(@" FROM");
            sql.Append(@" SINAMAIS.TFWEXCECAO");
            sql.Append(@" LEFT JOIN TFWMENSAGEM ON TFWMENSAGEM.CODIGOMENSAGEM = SINAMAIS.TFWEXCECAO.CODIGOMENSAGEM");
            sql.Append(@" WHERE (1=1)");

            if (entidade.Id != null && entidade.Id >= 0)
            {
                sql.Append(" AND (SINAMAIS.TFWEXCECAO.CODIGOEXCECAO = " + entidade.Id.ToString() + ") ");
            }

            if (!string.IsNullOrEmpty(entidade.Descricao))
            {
                sql.Append(" AND (SINAMAIS.TFWEXCECAO.MENSAGEMEXCECAO LIKE '%" + entidade.Descricao.Trim() + "%') ");
            }

            if (!string.IsNullOrEmpty(entidade.Modulo))
            {
                sql.Append(" AND (SINAMAIS.TFWEXCECAO.MODULO LIKE '%" + entidade.Modulo.Trim() + "%') ");
            }

            if (!string.IsNullOrEmpty(entidade.Submodulo))
            {
                sql.Append(" AND (SINAMAIS.TFWEXCECAO.SUBMODULO LIKE '%" + entidade.Submodulo.Trim() + "%') ");
            }

            if ((entidade.Mensagem != null) && !(string.IsNullOrEmpty(entidade.Mensagem.ResourceKey)))
            {
                sql.Append(" AND (TFWMENSAGEM.RESOURCEKEY LIKE '%" + entidade.Mensagem.ResourceKey.Trim() + "%') ");
            }

            //incluido - esertorio - 200809222059
            if ( (entidade.Mensagem.Id.HasValue) )
            {
                sql.Append(" AND (TFWMENSAGEM.CODIGOMENSAGEM = " + entidade.Mensagem.Id.ToString() + ") ");
            }

            return sql.ToString();
        }

        public object buscarIdResourceKey(Sinacor.Tools.Entidade.MensagemExcecao entidade)
        {
            object retorno = null;
            string  sql = string.Format(" SELECT CODIGOMENSAGEM FROM TFWMENSAGEM WHERE RESOURCEKEY = '{0}'", entidade.Mensagem.ResourceKey);
            
            ResourceAccess<Sinacor.Tools.Entidade.TipoMensagem> dados = new ResourceAccess<Sinacor.Tools.Entidade.TipoMensagem>();
            using (IDbCommand cmd = dados.getCommand(sql, CommandType.Text))
            {
                retorno = cmd.ExecuteScalar();
                if (retorno == DBNull.Value)
                    retorno = null;
                cmd.Connection.Close();
            }
            return retorno;
        }
        public object buscarProximoId()
        {
            object retorno = null;
            StringBuilder sql = new StringBuilder(@" SELECT MAX(NVL(CODIGOMENSAGEM,0)) + 1 FROM SINAMAIS.TFWEXCECAO ");
            ResourceAccess<Sinacor.Tools.Entidade.TipoMensagem> dados = new ResourceAccess<Sinacor.Tools.Entidade.TipoMensagem>();
            using (IDbCommand cmd = dados.getCommand(sql.ToString(), CommandType.Text))
            {
                retorno = cmd.ExecuteScalar();
                if (retorno == DBNull.Value)
                    retorno = null;
                cmd.Connection.Close();
            }
            return retorno;
        }
    }
}
